package kafkastudy.activemq;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * Created by hp on 2018/8/6.
 */
public class ActivemqProducer {

    public static void main(String[] args) {

        ConnectionFactory connectionFactory = null;
        Connection connection = null;
        Session session = null;
        MessageProducer messageProducer = null;
        try {
            //1创建连接工厂ConnectionFactory  需要username/password/url
            System.out.println(ActiveMQConnectionFactory.DEFAULT_USER + ActiveMQConnectionFactory.DEFAULT_PASSWORD
                    + ActiveMQConnectionFactory.DEFAULT_BROKER_URL);
            connectionFactory = new ActiveMQConnectionFactory("admin",
                    "admin", "failover:(tcp://10.1.1.49:61617,tcp://10.1.1.75:61617,tcp://10.1.1.80:61617)?Randomize=false");

            //2创建连接Connection 注意连接默认是关闭的，因此需要start开启
            connection = connectionFactory.createConnection();
            connection.start();

            //3前面2步的操作其实就是为了创建Session（上下文环境对象）
            //创建session有一些配置参数 比如是否启用事务，签收模式（这里先设置为自动签收模式auto）
            session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);

            //4通过session创建Destination对象，在p2p模式下是queue，在pub/sub模式下是topic
            Destination destination = session.createQueue("queue1");

            //5通过session， 发送消息的生产者，接收消息的消费者
            messageProducer = session.createProducer(destination);

            //6设置持久化，非持久化特性 如果非持久，那么意味着MQ的重启会导致消息丢失
            //如果持久化到kahaDB/levelDb/jdbc方式的话，意味着消息持久化
            messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

            //7定义JMS规范的消息类型，这里先使用简单的TextMessage
            //需要使用Session进行创建 可见Session是多么关键
            TextMessage textMessage = session.createTextMessage();
            textMessage.setText("Hello,ActiveMQ");
            messageProducer.send(textMessage);

        } catch (JMSException e) {
            e.printStackTrace();
        } finally {
            try {
                messageProducer.close();
                session.close();
                connection.close();
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
}
